Benannte Erfassungsgruppe: (?<name>...)

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2020.

* Some parts of this feature may have varying levels of support.

Eine benannte Erfassungsgruppe ist eine besondere Art von Erfassungsgruppe, die es ermöglicht, der Gruppe einen Namen zu geben. Das übereinstimmende Ergebnis der Gruppe kann später durch diesen Namen anstelle seines Indexes im Muster identifiziert werden.

Syntax

regex
(?<name>pattern)

Parameter

pattern

Ein Muster, das alles enthalten kann, was Sie in einem Regex-Literal verwenden dürfen, einschließlich einer Disjunktion.

name

Der Name der Gruppe. Es muss ein gültiger Bezeichner sein.

Beschreibung

Benannte Erfassungsgruppen können wie normale Erfassungsgruppen verwendet werden — sie haben ebenfalls ihren Match-Index im Ergebnisarray, und sie können durch \1, \2 usw. referenziert werden. Der einzige Unterschied besteht darin, dass sie zusätzlich durch ihren Namen referenziert werden können. Die Informationen über den Match der Erfassungsgruppe können abgerufen werden über:

Alle Namen müssen innerhalb desselben Musters eindeutig sein. Mehrere benannte Erfassungsgruppen mit demselben Namen führen zu einem Syntaxfehler.

js
/(?<name>)(?<name>)/; // SyntaxError: Invalid regular expression: Duplicate capture group name

Diese Einschränkung wird aufgehoben, wenn die doppelten benannten Erfassungsgruppen nicht in derselben alternative Disjunktion sind, sodass für jede Zeichenketteneingabe nur eine benannte Erfassungsgruppe tatsächlich übereinstimmen kann. Dies ist eine viel neuere Funktion, daher überprüfen Sie die Browser-Kompatibilität, bevor Sie sie verwenden.

js
/(?<year>\d{4})-\d{2}|\d{2}-(?<year>\d{4})/;
// Works; "year" can either come before or after the hyphen

Benannte Erfassungsgruppen werden alle im Ergebnis vorhanden sein. Wenn eine benannte Erfassungsgruppe nicht übereinstimmt (zum Beispiel, weil sie zu einer nicht übereinstimmenden Alternative in einer Disjunktion gehört), hat die entsprechende Eigenschaft im groups-Objekt den Wert undefined.

js
/(?<ab>ab)|(?<cd>cd)/.exec("cd").groups; // [Object: null prototype] { ab: undefined, cd: 'cd' }

Sie können die Start- und Endindizes jeder benannten Erfassungsgruppe im Eingabestring durch die Verwendung des d-Flags abrufen. Zusätzlich zum Zugriff auf sie über die indices-Eigenschaft des von exec() zurückgegebenen Arrays können Sie auch über ihre Namen auf indices.groups zugreifen.

Im Vergleich zu unbenannten Erfassungsgruppen haben benannte Erfassungsgruppen folgende Vorteile:

  • Sie ermöglichen Ihnen, jedem Teilergebnis einen beschreibenden Namen zu geben.
  • Sie ermöglichen Ihnen den Zugang zu Teilergebnissen, ohne sich an die Reihenfolge erinnern zu müssen, in der sie im Muster auftreten.
  • Beim Refactoring von Code können Sie die Reihenfolge der Erfassungsgruppen ändern, ohne sich Sorgen über unbeabsichtigte Änderungen an anderen Verweisen machen zu müssen.

Beispiele

Verwendung von benannten Erfassungsgruppen

Im folgenden Beispiel werden ein Zeitstempel und ein Autorenname aus einem Git-Protokolleintrag (Ausgabe mit git log --format=%ct,%an -- filename) geparst:

js
function parseLog(entry) {
  const { author, timestamp } = /^(?<timestamp>\d+),(?<author>.+)$/.exec(
    entry,
  ).groups;
  return `${author} committed on ${new Date(
    parseInt(timestamp, 10) * 1000,
  ).toLocaleString()}`;
}

parseLog("1560979912,Caroline"); // "Caroline committed on 6/19/2019, 5:31:52 PM"

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# prod-Atom

Browser-Kompatibilität

Siehe auch